package com.zx.system.block.service;

import com.zx.core.wrapper.ListWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.system.block.model.SysDept;
import com.zx.system.block.param.DeptParam;
import com.zx.system.block.vo.SysDeptVO;
import com.zx.system.block.vo.TreeVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * description: 业务层部门服务 <br>
 * create: 2024-09-22 13:24
 * </p>
 *
 * @author zhou  xun
 */
public interface ISysDeptService {
    /**
     * 获取部门树
     *
     * @param deptParam 部门信息
     * @return {@link List<TreeVO>}
     * @author zhou  xun
     * @since 2024-09-22
     */
    ListWrapper<TreeVO> getDeptTree(DeptParam deptParam);

    /**
     * 获取部门信息Map 用于部门信息匹配
     *
     * @return 包含部门标识作为键，{@link SysDept} 对象作为值的映射{@code Map<String, SysDept>}
     * @author zhou  xun
     * @since 2024-10-01
     */
    Map<String, SysDept> getDept();

    /**
     * 查询部门列表
     *
     * @param deptParam 部门信息
     * @return {@link ListWrapper<SysDept>}
     * @author zhou  xun
     * @since 2024-10-02
     */
    ListWrapper<SysDept> selectDeptList(DeptParam deptParam);

    /**
     * 查询部门列表VO
     *
     * @param deptParam 部门信息
     * @return {@link ListWrapper<SysDeptVO>}
     * @author zhou  xun
     * @since 2024-10-02
     */
    ListWrapper<SysDeptVO> selectDeptVOList(DeptParam deptParam);

    /**
     * 根据部门ID查询部门信息
     *
     * @param deptId 部门ID
     * @return {@link SysDept} 部门信息
     * @author zhou  xun
     * @since 2024-10-19
     */
    SysDept selectDeptById(String deptId);

    /**
     * 新增部门
     *
     * @param deptParam 部门信息
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-03
     */
    ResponseWrapper addDept(DeptParam deptParam);

    /**
     * 编辑部门
     *
     * @param deptParam 部门信息
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-03
     */
    ResponseWrapper editDept(DeptParam deptParam);

    /**
     * 编辑部门状态
     *
     * @param id     部门信息
     * @param status 部门状态 0停用 1 启用
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-03
     */
    ResponseWrapper editDeptStatus(String id, Integer status);

    /**
     * 删除部门
     *
     * @param deptId 部门信息
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-03
     */
    ResponseWrapper deleteDept(String deptId);
}